package org.wx.ormtest.step03.helper;

import lombok.extern.slf4j.Slf4j;
import org.wx.ormtest.step03.anno.Column;
import org.wx.ormtest.step03.entity.User;

import java.lang.reflect.Field;
import java.sql.ResultSet;

/**
 * @description: 利用自定义注解，对结果进行映射 改造成通用的
 * @author: wangxun
 * @createDate: 2021/3/2
 * @version: 1.0
 */
@Slf4j
public class UserEntityHelper {
    /**
     * 利用泛型方法，根据类模型，映射结果集，返回生成的实体对象
     * @param clazz
     * @param rs
     * @param <T>
     * @return
     * @throws Exception
     */
    static public <T> T create(Class<T> clazz,ResultSet rs)throws Exception{
        if(null == rs){
            return null;
        }
        T newInstance = clazz.newInstance();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            // 开启私有属性的访问权限
            field.setAccessible(true);
            // 获取字段上Column
            Column columnAnnotation = field.getAnnotation(Column.class);
            if (columnAnnotation == null) {
                continue;
            }
            // 获取对应的列名
            String columnName = columnAnnotation.value();
            if(null == columnName){
                return null;
            }
            // 利用反射 对对象设置值
            field.set(newInstance,rs.getObject(columnName));
        }
        //log.info("信息:{}",newInstance);
        return newInstance;
    }
}
